import { createRouter, createWebHashHistory, NavigationGuardNext, RouteLocationNormalized } from 'vue-router'
import IndexView from '../views/Index/index.vue';
import { MylocalStorage } from '../config/storage/MylocalStorage'; // 确保路径正确  
/**
 * createWebHistory就是
 * hash 模式是用 createWebHashHistory()
 * 
 * Memory 模式createMemoryHistory()
 * 用 createWebHistory() 创建 HTML5 模式，推荐使用这个模式：
 */

const router = createRouter({
  history: createWebHashHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'index',
      component: IndexView
    },
    {
      path: '/login',
      name: 'login',
      // route level code-splitting
      // this generates a separate chunk (About.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: () => import('../views/Login/index.vue')
    }
  ]
})


/**
 * 全局前置守卫
 * 当一个导航触发时，全局前置守卫按照创建顺序调用。守卫是异步解析执行，此时导航在所有守卫 resolve 完之前一直处于等待中。

每个守卫方法接收两个参数：

to: 即将要进入的目标 用一种标准化的方式
from: 当前导航正要离开的路由 用一种标准化的方式
可以返回的值如下:

false: 取消当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮)，那么 URL 地址会重置到 from 路由对应的地址。
一个路由地址: 通过一个路由地址重定向到一个不同的地址，如同调用 router.push()，
且可以传入诸如 replace: true 或 name: 'home' 之类的选项。它会中断当前的导航，同时用相同的 from 创建一个新导航。
 */
MylocalStorage.setItem("token","444444");
let isAuthenticated: boolean = false;
MylocalStorage.getItem("token").then(res=>{

  console.log(res);
  
  if(res===null){
    isAuthenticated=false;
  }else{
    isAuthenticated=true;
  }
})

//对没有登陆进行拦截
router.beforeEach(async (to, _from:RouteLocationNormalized, next: NavigationGuardNext) => {
  if (to.path === "/login") {
    next();
  } else {
    if (isAuthenticated) {
      next();
    } else {
      next("/login");
    }
  }
  
});

export default router;
